package com.itheima.tlias.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 切入点为注解的切面类
 *
 * @Author mr.luo
 * @Date 16 4月 2025 16:44
 */
@Slf4j
@Aspect
@Component
//@Order(1)
// 因为@Order()是springBoot的注解只有spring的组件能用，过滤器属于 servlet容器，所以无法使用
//只有拦截器与切面类才能使用@Order()或者实现Ordered接口
//public class AnnoAspect implements Ordered {
public class AnnoAspect{
    @Pointcut("@annotation(com.itheima.tlias.annotation.DemoAnno)")
    public void pt() {
    }

    @Around("pt()")
    public Object annoAspect(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        log.info("原始方法执行前执行");

        log.info("开始调用原始方法");
        Object result = proceedingJoinPoint.proceed();

        log.info("原始方法调用后执行逻辑，受原始方法的异常影响");

        //返回原始方法的结果
        return result;
    }
//    // 指定切面类的执行顺序，越小越先执行
//    @Override
//    public int getOrder() {
//        return 2;
//    }
}
